package com.lvyq.myplayer.common.shared

import android.content.Context
import android.content.SharedPreferences
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.lvyq.myplayer.parcelable.SongInfoData

/**
 * 文件描述：MyCollectSharePrefsManager 我的收藏
 * 作者：lvyq
 * 创建时间：2025-06-04
 * 修改时间：2025-06-04
 */
object MyCollectSharePrefsManager {
    private const val PREF_NAME = "myCollect"
    private const val COLLECT_PLAY_MUSIC = "collect_play_list"

    private fun getPrefs(context: Context): SharedPreferences {
        return context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE)
    }
    private fun getGson(): Gson {
        return Gson()
    }

    // 保存数据
    fun saveCollectData(context: Context, data: SongInfoData) {
        val prefs = getPrefs(context)
        val editor = prefs.edit()

        // 获取当前存储的列表
        val currentList = getCollectDataList(context).toMutableList()

        // 查找并删除相同 id 的数据（如果有）
        val index = currentList.indexOfFirst { it.id == data.id }
        if (index != -1) {
            currentList.removeAt(index)
        }

        // 添加新的数据
        currentList.add(data)

        // 保存到 SharedPreferences
        val json = getGson().toJson(currentList)
        editor.putString(COLLECT_PLAY_MUSIC, json)
        editor.apply()
    }

    // 获取数据列表
    fun getCollectDataList(context: Context): List<SongInfoData> {
        val prefs = getPrefs(context)
        val json = prefs.getString(COLLECT_PLAY_MUSIC, null)
        return if (json != null) {
            val type = object : TypeToken<List<SongInfoData>>() {}.type
            getGson().fromJson(json, type)
        } else {
            emptyList()
        }
    }

    // 通过 id 删除数据
    fun deleteCollectDataById(context: Context, id: Int): Boolean {
        val prefs = getPrefs(context)
        val editor = prefs.edit()

        // 获取当前存储的列表
        val currentList = getCollectDataList(context).toMutableList()

        // 查找并删除指定 id 的数据
        val index = currentList.indexOfFirst { it.id == id }
        if (index != -1) {
            currentList.removeAt(index)
            // 保存更新后的列表
            val json = getGson().toJson(currentList)
            editor.putString(COLLECT_PLAY_MUSIC, json)
            editor.apply()
            return true
        }
        return false
    }

    // 批量删除数据
    fun deleteCollectDataByIds(context: Context, ids: List<Int>): Boolean {
        val prefs = getPrefs(context)
        val editor = prefs.edit()

        // 获取当前存储的列表
        val currentList = getCollectDataList(context)

        // 过滤掉所有 id 在 ids 中的数据
        val newList = currentList.filterNot { ids.contains(it.id) } as ArrayList<SongInfoData>

        // 保存更新后的列表
        val json = getGson().toJson(newList)
        editor.putString(COLLECT_PLAY_MUSIC, json)
        editor.apply()

        return newList.size != currentList.size
    }

    // 通过 id 判断数据是否存在
    fun isCollectDataExists(context: Context, id: Int): Boolean {
        val currentList = getCollectDataList(context)
        return currentList.any { it.id == id }
    }
}